package com.code.lightning.code.oracle;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * MYSQL对应类型枚举类
 * @author lin
 * @date 2020-09-17 23:23
 *
 * oracle    Java
 *
 * - VARCHAR	    String.class
 * - CHAR	        String.class
 * - TEXT	        String.class
 * - MEDIUMTEXT	    String.class
 * - LONGTEXT	    String.class
 * - TINYTEXT	    String.class
 * - BIT	        Boolean.class
 * - INT	        int.class
 * - BIGINT	        long.class
 * - DOUBLE	        double.class
 * - TINYINT	    int.class
 * - FLOAT	        float.class
 * - DECIMAL	    BigDecimal.class
 * - INT	        int.class
 * - BIGINT	        int.class
 * - DECIMAL	    BigDecimal.class
 * - DATETIME	    Date.class
 * - TIME	        Date.class
 * - DATE	        Date.class
 * - TIMESTAMP	    Date.class
 */
@NoArgsConstructor
@AllArgsConstructor
@Getter
public enum OracleConvertEnum {

    /**
     * VARCHAR 类型
     */
    VARCHAR2("VARCHAR2", "String", String.class, String.class.getTypeName()),

    /**
     * NVARCHAR2 类型
     */
    NVARCHAR2("NVARCHAR2", "String", String.class, String.class.getTypeName()),

    /**
     * CHAR 类型
     */
    CHAR("CHAR", "String", String.class, String.class.getTypeName()),

    /**
     * CLOB 类型
     */
    CLOB("CLOB", "String", String.class, String.class.getTypeName()),

    /**
     * NCLOB 类型
     */
    NCLOB("NCLOB", "String", String.class, String.class.getTypeName()),

    /**
     *  BLOB 类型
     */
    BLOB("BLOB", "String", String.class, String.class.getTypeName()),

    /**
     * NUMBER 类型
     */
    NUMBER("NUMBER", "Integer", Integer.class, Integer.class.getTypeName()),

    /**
     * BIGINT 类型
     */
    BIGINT("BIGINT", "Long", Long.class, Long.class.getTypeName()),

    /**
     * RAW 类型
     */
    RAW("RAW", "String", String.class, String.class.getTypeName()),

    /**
     * BINARY_FLOAT 类型
     */
    BINARY_FLOAT("BINARY_FLOAT", "Float", Double.class, Double.class.getTypeName()),

    /**
     * BINARY_DOUBLE 类型
     */
    BINARY_DOUBLE("BINARY_DOUBLE", "Double", Double.class, Double.class.getTypeName()),

    /**
     * DATE 类型
     */
    DATE("DATE", "Date", Date.class, Date.class.getTypeName()),

    /**
     * TIMESTAMP 类型
     */
    TIMESTAMP("TIMESTAMP", "Date", Date.class, Date.class.getTypeName()),

    /**
     * FLOAT 类型
     */
    FLOAT("FLOAT", "Float", Float.class, Float.class.getTypeName()),

    /**
     * LONG 类型
     */
    LONG("LONG", "Long", Long.class, Long.class.getTypeName()),

    /**
     * ROWID 类型
     */
    ROWID("ROWID", "Integer", Integer.class, Integer.class.getTypeName()),

    /**
     * LONG RAW 类型
     */
    LONGRAW("String", "String", String.class, String.class.getTypeName()),

    /**
     * NCHAR 类型
     */
    NCHAR("NCHAR", "Long", String.class, String.class.getTypeName());

    /**
     * MYSQL数据类型
     */
    private String oracleType;

    /**
     * Java数据类型
     */
    private String javaType;

    /**
     * Java数据类型class
     */
    private Class javaTypeClass;

    /**
     * Java 数据类型class全类名
     */
    private String javaTypeClassName;


    /**
     * 数据数据库类型名称获取相应枚举类
     * @param oracleType
     * @return
     */
    public static OracleConvertEnum getEnumByOracleType(String oracleType) {
        for (OracleConvertEnum value : OracleConvertEnum.values()) {
            if(oracleType.replace(" ","").matches(value.getOracleType() + "\\s*(\\S+)\\s*")||value.getOracleType().equals(oracleType.replace(" ",""))) {
                return value;
            }
        }
        return null;
    }

}
